package de.akabahn.ebd.stw.zdxfc.prs.tco.elemente;

import static de.akabahn.ebd.stw.zdxfc.prs.ZDXFCConstants.BIT0;

import java.awt.Color;
import java.awt.Graphics;

/**
 * Implementierung einer <code>Lampe</code>.<br>
 * <br>
 * Bitcodierung<br>
 * <pre>
 * BIT1 BIT0  BEDEUTUNG
 *    0    0  AUS
 *    0    1  ROT AN
 *    1    0  ROT BLINKT
 * </pre>
 *    
 * @author Peter Eimann
 * @since 1.1
 * @version 1.1
 */
public class Lampe {

	private String id;
	private int ausleuchtung;

	private int posX;
	private int posY;
	private Color lampeAusFarbe;
	private Color lampeAnFarbe;
	
	/**
	 * Initialisierung der Lampe mit den uebergebenen Eigenschaften
	 * 
	 * @param id Eindeutige ID des Elements, wird fuer die Referenz auf das
	 *           Element benoetigt (die ID ist der Schluessel in den Maps, in
	 *           denen das Element gespeichert ist.
	 * @param posX X-Koordinate der Startposition der Lampe
	 * @param posY Y-Koordinate der Startpositionen der Lampe
	 * @param lampeAusFarbe Farbe der ausgeschalteten Lampe
	 * @param lampeAnFarbe Farbe der eingeschalteten Lampe
	 */
	public Lampe(String id, int posX, int posY, Color lampeAusFarbe, Color lampeAnFarbe) {
		this.id = id;
		this.posX = posX;
		this.posY = posY;
		this.lampeAusFarbe = lampeAusFarbe;
		this.lampeAnFarbe = lampeAnFarbe;
	}

	/**
	 * Gibt den bitcodierten Wert der Ausleuchtung zurueck
	 * 
	 * @return Die Ausleuchtung
	 */
	public int getAusleuchtung() {
		return ausleuchtung;
	}

	/**
	 * Setzt den bitcodierten Wert der Ausleuchtung
	 * 
	 * @param ausleuchtung Die Ausleuchtung
	 */
	public void setAusleuchtung(int ausleuchtung) {
		this.ausleuchtung = ausleuchtung;
	}

	/**
	 * Gibt die ID des Elements an
	 * 
	 * @return die ID
	 */
	public String getId() {
		return id;
	}
	
	/**
	 * Zeichnet die Lampe auf dem TCO mit der Farbe des Ausleuchtungszustands (aus oder an).
	 * 
	 * @param g Der Grafik-Kontext
	 */
	public void paint(Graphics g) {
		if ((ausleuchtung & BIT0) == BIT0) {
			g.setColor(lampeAnFarbe);
		} else {
			g.setColor(lampeAusFarbe);
		}

		g.fillOval(posX, posY, 11, 12);
	}
}
